www.gusucode.com > VC++ ASP文件上传组件源代码+调用示例-源码程序 > VC++ ASP文件上传组件源代码+调用示例-源码程序/code/aspup_src/MyRequest/Parser.cpp
//Download by http://www.NewXing.com // Parser.cpp: implementation of the CSafeArrayParser class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "Parser.h" #include "Form.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CParser::CParser(CBuffer bRequest, CBuffer bBoundry) { m_bRequest = bRequest; m_bBoundry = bBoundry; } HRESULT CParser::Parse(CForm* pForm) { int nPos = NextBoundry(0); int i = nPos + m_bBoundry.m_nSize; while(m_bRequest.m_lpBuffer[i] != '-') { i += 2; nPos = NextBoundry(i); if(nPos == -1) return E_FAIL; CBuffer bItem = m_bRequest.subBuffer(nPos - i - 2, i); ParseItem(bItem, pForm); i = nPos + m_bBoundry.m_nSize; } return S_OK; } int CParser::NextBoundry(int nPos) { CBuffer bTemp; do { nPos = m_bRequest.find("--", nPos); if(nPos == -1) return -1; nPos += 2; bTemp = m_bRequest.subBuffer(m_bBoundry.m_nSize, nPos); } while(bTemp != m_bBoundry); return nPos; } BYTE lpCRLF2[4] = { 0x0d, 0x0a, 0x0d, 0x0a }; void CParser::ParseItem(CBuffer bItem, CForm *pForm) { CBuffer bCRLF2(lpCRLF2, 4); int i = bItem.find(bCRLF2); CBuffer bHeader = bItem.subBuffer(i); int nLen = bItem.m_nSize - i - 6; CBuffer bBody = bItem.subBuffer(nLen, i+4); i = bHeader.find("name=\""); i += 6; // length of [name="] int j = bHeader.find("\"", i); CBuffer bName = bHeader.subBuffer(j - i, i); CComBSTR bstrName = bName; BOOL bFile = FALSE; CComBSTR bstrFileName = _T(""); CComBSTR bstrCType = _T(""); i = bHeader.find("filename=\"", j+1); if(i != -1) { i += 10; // length of [filename="] bFile = TRUE; int j = bHeader.find("\"", i); CBuffer bFileName = bHeader.subBuffer(j - i, i); bstrFileName = bFileName; i = bHeader.find("Content-Type: ", j+1); i += 14; // length of [Content-Type: ] j = bHeader.m_nSize; CBuffer bCType = bHeader.subBuffer(j - i, i); bstrCType = bCType; } pForm->AddItem(bstrName, bstrFileName, bstrCType, bBody, bFile); }